import express from "express";
import {authenticateToken} from "../../config/auth.js";
import roleService from "../../services/user/roleService.js";
import asyncHandler from "../../utils/asyncHandler.js";
import ResponseHandler from "../../utils/responseHandler.js";

const roleRouter = express.Router();

/**
 * @description 创建角色
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleRouter.post('/createRole',
    authenticateToken,
    asyncHandler(async (req, res) => {

        // 创建角色
        const errorMessage = roleService.createRole(req.body);
        if (errorMessage) {
            return await ResponseHandler.responseResult(res, errorMessage); // 返回错误信息
        }

        // 返回成功响应
        await ResponseHandler.responseResult(res, null, '角色创建成功');
    })
);

/**
 * @description 获取所有角色
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleRouter.get('/getAllRoles',
    asyncHandler(async (req, res) => {
        const allRoles = roleService.getAllRoles(); // 获取角色列表
        await ResponseHandler.responseResult(res, allRoles, '获取角色成功');
    })
);

/**
 * @description 通过角色 ID 获取角色
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleRouter.post('/getRoleById',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const roleId = req.body.roleId || req.user.role_id; // 从请求体或用户信息中获取角色 ID
        const role = await roleService.getRoleById(roleId);
        if (!role) {
            return await ResponseHandler.responseResult(res, null, '角色未找到');
        }
        await ResponseHandler.responseResult(res, role, '获取角色成功');
    })
);

/**
 * @description 更新角色
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleRouter.post('/updateRole',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const {roleId, roleData} = req.body;

        const errorMessage = await roleService.updateRole(roleId, roleData);
        if (errorMessage) {
            return await ResponseHandler.responseResult(res, errorMessage); // 返回错误信息
        }

        await ResponseHandler.responseResult(res, null, '角色更新成功');
    })
);

/**
 * @description 逻辑删除角色
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
roleRouter.post('/deleteRole',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const result = await roleService.deleteRole(req.body.roleIds); // 从请求体中获取角色 ID 列表
        if (result) {
            return await ResponseHandler.responseResult(res, '角色逻辑删除失败');
        }
        await ResponseHandler.responseResult(res, null, '角色逻辑删除成功');
    })
);

export default roleRouter; // 导出角色路由
